from flask import Flask, request, url_for
from werkzeug.routing import BaseConverter

app = Flask(__name__)
app.debug = True


# 配置好过滤器后，会在参数传入时，自动触发
class ListConverter(BaseConverter):
     regex = '.*'  # 这个regex代表都匹配的意思，可以根据自己的需求制定url规则

     def to_python(self, value):
          '''这个函数用于拿到了路由里的动态参数赋值给value，
            可以在to_python进行操作动态参数，
            返回操作完的的结果给视图函数的形参'''
          return value.split('+')

     def to_url(self, value):
          '''这个函数用于和url_for连用，
             url_for通过指定给动态参数(以关键字实参的形式)赋值给value
             我们可以根据我们的需求操作url_for传进来的参数，
             然后返回一个理想的动态路由内容拼接在url上'''
          return '+'.join(value)


app.url_map.converters['list'] = ListConverter


@app.route('/student_list/<list:students>/')
def student_list(students):
     print(url_for('student_list', students=['a', 'b']))  # 输出 /student_list/a+b/

     return '{}'.format(students)


if __name__ == '__main__':
     app.run()
